/**
 * 主要JavaScript文件
 * 处理页面初始化和全局功能
 */

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
  // 检查是否已登录
  if (!isLoggedIn() && !window.location.pathname.includes('/login')) {
    // 未登录且不在登录页，跳转到登录页
    window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
    return;
  }
  
  // 初始化导航菜单
  initMenu();
  
  // 初始化请求拦截器（如果使用axios）
  if (window.axios) {
    setupAxiosInterceptors(window.axios);
  }
  
  // 绑定退出登录按钮事件
  const logoutBtn = document.getElementById('logout-btn');
  if (logoutBtn) {
    logoutBtn.addEventListener('click', function(e) {
      e.preventDefault();
      logout();
    });
  }
});

/**
 * 初始化侧边栏菜单
 */
function initMenu() {
  // 根据当前用户权限初始化菜单
  const token = getToken();
  if (!token) return;

  // 获取用户权限
  fetch('/lzw/permission/user', {
    headers: {
      'Authorization': token
    }
  })
  .then(response => response.json())
  .then(result => {
    if (result.code === 200) {
      renderMenu(result.data);
    }
  })
  .catch(error => {
    console.error('加载用户权限失败:', error);
  });
}

/**
 * 渲染侧边栏菜单
 * @param {Array} permissions - 用户权限列表
 */
function renderMenu(permissions) {
  const sidebar = document.querySelector('.sidebar-menu');
  if (!sidebar) return;
  
  // 清空现有菜单
  sidebar.innerHTML = '';
  
  // 系统管理菜单
  if (hasPermission(permissions, 'system:manage')) {
    const systemMenu = createMenuItem('系统管理', 'fas fa-cogs');
    
    // 用户管理子菜单
    if (hasPermission(permissions, 'system:user')) {
      const userItem = createSubMenuItem('用户管理', '/lzw/user/page');
      systemMenu.querySelector('ul').appendChild(userItem);
    }
    
    // 角色管理子菜单
    if (hasPermission(permissions, 'system:role')) {
      const roleItem = createSubMenuItem('角色管理', '/lzw/role/page');
      systemMenu.querySelector('ul').appendChild(roleItem);
    }
    
    // 权限管理子菜单
    if (hasPermission(permissions, 'system:permission')) {
      const permItem = createSubMenuItem('权限管理', '/lzw/permission/tree');
      systemMenu.querySelector('ul').appendChild(permItem);
    }
    
    // 部门管理子菜单
    if (hasPermission(permissions, 'system:dept')) {
      const deptItem = createSubMenuItem('部门管理', '/lzw/dept/tree');
      systemMenu.querySelector('ul').appendChild(deptItem);
    }
    
    sidebar.appendChild(systemMenu);
  }
  
  // 员工管理菜单
  if (hasPermission(permissions, 'employee')) {
    const empMenu = createMenuItem('员工管理', 'fas fa-users');
    
    // 员工信息子菜单
    if (hasPermission(permissions, 'employee:info')) {
      const infoItem = createSubMenuItem('员工信息', '/lzw/employee/list');
      empMenu.querySelector('ul').appendChild(infoItem);
    }
    
    // 员工档案子菜单
    if (hasPermission(permissions, 'employee:profile')) {
      const profileItem = createSubMenuItem('员工档案', '/lzw/employee/profile');
      empMenu.querySelector('ul').appendChild(profileItem);
    }
    
    sidebar.appendChild(empMenu);
  }
}

/**
 * 创建菜单项
 * @param {string} title - 菜单标题
 * @param {string} icon - 图标类名
 * @returns {HTMLElement} 菜单项元素
 */
function createMenuItem(title, icon) {
  const li = document.createElement('li');
  li.className = 'nav-item has-treeview';
  
  li.innerHTML = `
    <a href="#" class="nav-link">
      <i class="${icon}"></i>
      <p>
        ${title}
        <i class="right fas fa-angle-left"></i>
      </p>
    </a>
    <ul class="nav nav-treeview"></ul>
  `;
  
  return li;
}

/**
 * 创建子菜单项
 * @param {string} title - 菜单标题
 * @param {string} url - 链接地址
 * @returns {HTMLElement} 子菜单项元素
 */
function createSubMenuItem(title, url) {
  const li = document.createElement('li');
  li.className = 'nav-item';
  
  li.innerHTML = `
    <a href="${url}" class="nav-link">
      <i class="far fa-circle nav-icon"></i>
      <p>${title}</p>
    </a>
  `;
  
  return li;
}

/**
 * 判断是否拥有指定权限
 * @param {Array} permissions - 权限列表
 * @param {string} code - 权限代码
 * @returns {boolean} 是否拥有权限
 */
function hasPermission(permissions, code) {
  if (!permissions || !permissions.length) return false;
  
  return permissions.some(p => 
    p.permissionCode === code || 
    (p.permissionCode && p.permissionCode.startsWith(code + ':'))
  );
} 